The last several years of the computer age have been years of dramatic technological progress. Computers have permeated the fabric of society and become indispensable to commerce and government. They have rapidly become more powerful while at the same time becoming smaller and cheaper. Computer system technology has evolved through four generations. Innumerable programming languages have been implemented and the discipline of programming has gone through at least one revolution.
During this era of dramatic technical progress one aspect of computing has progressed imperceptibly if at all. The theoretical understanding of computers and computing remains pretty much as it existed 45 years ago and it has had very little influence on the general progress of other aspects of computing. Almost all of this progress is due to improved technology, direct experience and native inventiveness.
"The theory of computer science" is largely a collection of mathematical models and conceptual viewpoints, most of which existed before the first digital computer was built. These different models such as, automata theory, the Turing machine and formal languages all ask questions about issues of computability and revolve around the notion of the algorithm. The questions of computability address the foundations of mathematics itself and deal with the limits of what can be computed with various symbol manipulation rule systems embodied in computational devices such as machines and languages. To understand "the theory of computer science" it is necessary to understand the notion of the algorithm.
The notion of the algorithm is fundamental to mathematics. To understand the significance of the notion to mathematics it is necessary to understand the history of its development. The term itself derives from the name of ninth century Persian mathematician named Mohammed ibn Musa al-Khowarizmi. In about 825 A.D., he wrote a small book describing how to calculate with a new ten symbol, positional value number system developed in India. The book described simple procedures for carrying out addition, subtraction, multiplication and division in the new system. Around 1120 A.D., this small book was translated into Latin under the title Liber Algorismi de numero Indorum (The Book of al-Khowarizmi on the Hindu number system). This translation of the book was widely distributed in Europe and it introduced the Hindu-Arabic number system to Europe. By the mid thirteenth century, al-Khowarizmi had been forgotten but the term algorism (Latin for al-Kowarizmi's book) had come generally to refer to computation in the new number system. At this time, an algorism was any book related to the subject. The algorisms were the four arithmetic operations. An algorist was a person who calculated in the new number system as opposed to an abacist who used an abacus. By 1500 A.D., the algorists had prevailed and the abacists had largely disappeared.
These algorisms were strictly mechanical procedures to manipulate symbols. They could be carried out by any person by mechanically following simple rules, even though the person had no understanding of the theory of operation, the person needed no cleverness to determine a correct answer. Computing with Roman numerals on the other hand required considerable skill and ingenuity. At this time, other examples of mechanical formulation existed such as Euclid's method to find the greatest common denominator of two numbers. The use of simple mechanical computation fascinated the medieval mathematicians. They wondered if it was possible that the whole of mathematics or even all of human knowledge could be mechanically formulated and calculated with simple rules of symbol manipulation.
Leibniz failed in an attempt to complete just such a formulation in the 1660s with his calculus ratiocinator or characteristica universalis. The object of Leibniz was to "enable the truths of any science, when formulated in the universal language, to be computed by arithmetical operations". Insight, ingenuity and imagination would no longer have been required in mathematics. After Leibniz's failure the idea lay fallow for two hundred years.
When the dream of formalizing thought with mechanical procedures in symbols reemerged with the symbolic logic of George Boole in 1854, it had stiff competition to overcome in the form of Euclidian geometry. Euclidian geometry, with its axioms and rules of reasoning from the simple to the complex was the established model of intellectual thought in the western world. In the 1680's, after the discovery of analytical geometry and having made new discoveries with his own invention of fluxional calculus, Newton was careful to cast all the mathematical demonstrations in his presentation of these new discoveries in classical Greek geometry. At the time, a symbolic analytical presentation would neither have been understood nor accepted.
Late into the nineteenth century symbolic computation was distrusted and discounted. Geometry, dealing with relationships among points, lines and surfaces, was intuitive, obvious and clear whereas algebra dealt with arbitrary symbols related by arbitrary rules that did not relate to any specific reality. The attitude is exemplified by a nineteenth century astronomer who remarked that he had not the "smallest confidence in any result which is essentially obtained by the use of imaginary symbols".
Toward the end of the nineteenth century Euclidian geometry lost its philosophical preeminence and symbolic computation emerged as the model of intellectual thought. The fall of geometry was precipitated by Bolyai, Gauss, Lobachevski and Riemann with the development of non Euclidian geometries which were internally consistent and therefore just as valid a mathematical system as Euclidian geometry. The rise of symbolic computation was nurtured by Boole, Peirce, Schroder, Peano and Frege who were trying to establish acceptable foundations for symbolic logic. These two streams of endeavor culminated in Hilbert's rigorization of Euclidian geometry in terms of algebra in Grundlagen der Geometrie (Foundations of Geometry) published in 1899 which emphasized the undefined nature of the axioms. "One must be able to say at all times-instead of points, straight lines and planes- tables, chairs and beer mugs". Euclidian geometry was after all just one of many possible axiomatic symbolic computation systems.
As the twentieth century dawned, symbolic computation had been established as the arena of mathematical theorizing and axiomatic systems provided the rules of the game. The mathematicians were hot on the trail of settling the game once and for all. They seemed to be on the verge of fulfilling Leibniz's dream of the universal symbolic language that would proffer absolute certainty and truth.
This quest was led by David Hilbert, who outlined a program to settle once and for all the foundational issues of mathematics. The program focused on the resolution of three questions.
1. Was mathematics complete in the sense that every statement could be proved or disproved? PA1 2. Was mathematics consistent in the sense that no statement could be proved both true and false? PA1 3. Was mathematics decidable in the sense that there existed a definite method to determine the truth or falsity of any mathematical statement? PA1 "that it shall be possible to establish the correctness of a solution by means of a finite number of steps based upon a finite number of hypotheses which are implied in the statement of the problem and which must always be exactly formulated"--David Hilbert. PA1 "In mathematics, "algorithm" is commonly understood to be an exact prescription, defining a computational process, leading from various initial data to the desired result"--A. A. Markov. PA1 1. A theory of programming, with emphasis not mainly on the problems of distinguishing the computable from the noncomputable, but rather on a practical theory of algorithms concerned with the construction of economical and efficient programs; PA1 2. A theory of process and processor organization, which takes into account the finite dimensions of existing memories, the availability of storage hierarchies of varying access speeds and costs, and the desire for a reduction in computation and program production time; PA1 3. A theory of description for processes and computational structures in terms acceptable to the processor; and PA1 4. A theory of computer applications which would include all features common to most numeric and nonnumeric applications. PA1 "computer science itself becomes no more (and no less) than the discipline of constructing appropriate descriptive languages"--Harold Abelson, Geraly Jay Sussmann, and Julie Sussmann. PA1 "The notion of the algorithm is basic to all computer programming . . . "--Donald E. Knuth. PA1 " . . . the basic concept of problem solving on the computer--the algorithm"--M.S. Carberry, H. M. Khalil, J. F. Leathrum and L. S. Levy. PA1 " . . . the notion of the algorithm is essential to computer programming"--Kurt Maly and Allen R. Flanson. PA1 "One of the concepts most central to computer science is that of an algorithm"--Zenon W. Pylyshyn. PA1 1. Must be a step by step sequence of operations PA1 2. Each operation must be precisely defined PA1 3. It must terminate in a finite number of steps PA1 4. It must effectively yield a correct solution PA1 5. It must be deterministic in that given the same input it will always yield the same solution PA1 " . . . there is an extension of the notion of algorithm (called nondeterministic algorithms)"--M. S. Carberry, H. M. Khalil, J. F. Leathrum and L. S. Levy. PA1 "Any computer program is at least a semi-algorithm and any program that always halts is an algorithm"--R. R. Karthage. PA1 "There is another word for algorithm which obeys all of the above properties except termination and that is computational procedure"--Ellis Horowitz and Sartaj Sahni. PA1 "An algorithm A is a probabilistically good algorithm if the algorithm "almost always" generates either an exact solution or a solution with a value that is "exceedingly close" to the value of the optimal solution"--Benjamin W. Wah and C. V. Ramamoorthy. PA1 "The procedure becomes an algorithm if the Turing machine always halts"--Kurt Maly and Allen R. Hanson. PA1 "By admitting probabilistic procedures in algorithms . . . "--F. S. Beckman. PA1 " . . . if, after executing some step, the control logic shifts to another step of the algorithm as dictated by a random device (for example, coin tossing), we call the algorithm random algorithm"--E. V. Krishnamurthy. PA1 "An algorithm which is based on such convergence tests is called an infinite algorithm"--E. V. Krishnamurthy. PA1 "Algorithms that are not direct are called indirect"--John K. Rice and John R. Rice. PA1 "It (a concurrent program) consists of several sequential processes whose execution sequences are interleaved."--Ben-Ari M. Ben-Ari. PA1 "We will build concurrent programs out of sequential processes that are executed simultaneously."--Per Brinch Hansen. PA1 "(sequential) Processes are called concurrent if their execution overlap in time."--Per Brinch Hansen. PA1 " . . . parallel composition of communicating sequential processes is a fundamental program structuring method."--C. A. R. Hoare. PA1 "In particular, in theoretical computer science we have been guilty of behaving too much like pure mathematicians; The mathematicians' compass has not always guided us well in exploring computer science. Time and again, we have valued the difficulty of proofs over the insights the proved results give us about computing; we have been hypnotized by mathematical elegance and pursued abstraction for its own sake. Frequently we have practiced "intellectual counter punching" by staying with small, previously defined (and possibly irrelevant) problems instead of searching for new formulations and development of theories more directly related to computing. . . . I believe that as we explore information processing further, there will be startling surprises and that our current ideas about computing will have to be modified substantially."--Juris Harmanis.
This definite method of decidability was the modern incarnation of Leibniz's arithmetical operations of his universal symbolic language.
Hilbert firmly believed that the answer to all three questions was `yes`, and the program was simply one of tidying up loose ends. Hilbert was convinced that an unsolvable mathematical problem did not exist, "every mathematical problem must necessarily be susceptible to an exact statement, either in the form of an actual answer to the question asked , or by the proof of the impossibility of its solution".
In 1931, Kurt Godel demonstrated that any axiom system expressive enough to contain arithmetic could not be both complete (there existed statements that could not be proved either true or false) and consistent (free of contradictions) in the terms of the axiom system. This result was the death knell for Hilbert's program. The answers to the first two questions were no. There remained the question of decidability. The entscheidungsproblem as Hilbert termed it. After Godel proved that unsolvable problems (unprovable theorems) could exist in an axiom system, the decidability problem became a search for a definite method to determine if a given problem was solvable or unsolvable in a given axiom system.
The decidability problem appealed directly to the notion of a definite method which was also referred to as an effective procedure or a mechanical procedure. This notion had always been fundamental to mathematics but had been intuitively accepted and had not been a subject of investigation itself. In essence, a person should know an effective procedure when that person sees one. But, to demonstrate something about the nature of effective procedures there must be a precise characterization of what constitutes an effective procedure.
Hilbert made it clear what constituted an acceptable mathematical solution in his 1900 paper posing 23 problems which he considered important to the future of mathematics.
Satisfactorily characterizing this notion of effective or mechanical procedure became an important foundational issue in mathematics and several mathematicians applied themselves to the problem. Among them were Herbrand and Godel, Post, Turing, Church and Markov. Each had a totally different characterization of effective computability which were all shown later to be logically equivalent. In 1936, both Church with his lambda calculus and Turing with his machine proved that no effective procedure existed to determine the provability or unprovability of a given mathematical problem. Therefore, the answer to Hilbert's third question was also `no` Leibniz's calculus ratiocinator with its arithmetical resolution of all questions was not possible. Thus, ingenuity, insight and imagination cannot be done away with in mathematics after all.
Questions of effective computability have continued to be a fundamental concern of mathematicians. Through the 1940s and 1950s A. A. Markov tried to consolidate all the work of the other mathematicians on effective computability by introducing the term algorithm with its modern meaning as a name for his own theory of effectively computable functions. In the translated first sentence of his 1954 book Teoriya Algorifmov (Theory of Algorithms) he states:
The term algorithm was not, apparently, a commonly used mathematical term in America or Europe before Markov, a Russian, introduced it. None of the other investigators, Herbrand and Godel, Post, Turing or Church used the term. The term however caught on very quickly in the computing community. In 1958 a new programming language was named ALGOL (ALGOrithmic Language). In 1960 a new department of the Communications of the ACM (Association for computing machinery) was introduced called "Algorithms".
Historically, the notion of the algorithm was developed to investigate the foundations of mathematics and has evolved in relation to the needs of mathematicians. The algorithm in mathematics is a limiting definition of what constitutes an acceptable solution to a mathematical problem. It is the foundational notion of what mathematics is all about and Turing's machine emerged as the preferred definition of the algorithm for mathematicians.
When the computer emerged in 1945, its birth was attended by two professional groups; electrical engineers and mathematicians. It was inevitable that the theoretical aspects of this newly emerging phenomena would be established by the mathematicians. One of these mathematicians, John Von Neumann, was a student of Hilbert's and a significant contributor to his program to resolve the foundations of mathematics.
The computer did mathematical computation, it computed one step at a time and each step was precisely defined. Mathematics already had an established theory of computability and a machine model of computation (the Turing machine) that proceeded one precisely defined step at a time. The notion of the algorithm was quite naturally adopted by those theorizing about computers as a fundamental paradigm. This activity eventually came to be called "the theory of computer science."
Many attempts have been made to define computer science. These definitions view computer science as a heterogeneous group of disciplines related to the creation, use and study of computers. A typical definition simply offers a list of included topics such as: computability, complexity, algorithm theory, automata theory, programming, high level languages, machine languages, architecture, circuit design, switching theory, system organization, numerical mathematics, artificial intelligence, other applications, etc. One definition attributed to H. Zemanek is relatively concise and suggests that computer science consists of four distinct theoretical domains. He said that computer science is:
The most recent and comprehensive survey of the attempts to define computer science is an article in the Annals of the History of Computing.
Computer science appears to consist of a quite disparate group of disciplines. There is the theorist concerned with formalized machines, the hardware engineer concerned with logic circuits, the software engineer concerned with symbolic expressions, the architect concerned with dynamic interpreting structures, the systems programmer concerned with interacting processes and the user concerned with his own unique problem. This fragmented face of computer science seems to be a generally accepted inevitability.
Can an underlying commonality of concern be discovered among these several disciplines and possibly, a conceptual focus for computer science? Item (1) in the above list is concerned with programming, which is the rendering of symbolic process expression. Item (2) is concerned with processor organizations, which is an expression of a process to interpret symbolically expressed processes. Item (3) is directly concerned with symbolic process expressions. Item (4) is concerned with process expression in general. All of the disciplines that are included under the heading of computer science in any list are concerned in one way or another with the creation, expression, or actualization of process expressions. A logic circuit is an expression of a process that can happen all by itself. An architecture is an expression of a continuously acting process to interpret symbolically expressed processes. A program is a symbolic expression of a process. A programming language is an environment within which to create symbolic expressions. A compiler is an expression of a process that translates between symbolic expressions in different languages. An operating system is an expression of a process that manages the interpretation of other process expressions.
Computer science can be viewed as primarily concerned with questions about the expression of processes and the actualization of those expressions. What are the all the possible ways a process can be expressed? Are some expressions superior in any sense to other expressions? What are all the possible ways of actualizing an expression. Are there common conceptual elements underlying all expressions? What is the best programming language? How can the best program be formulated? How can the best architecture be built? What is the best implementation environment? These are the questions that occupy computer scientists and they all revolve around the nature of process expression.
Mathematicians, on the other hand, are primarily interested in exploring the behavior of specific processes or classes of process. They bypass general problems of expression by appealing to a very formal and minimalized model of expression; the algorithm as characterized by the Turing machine. They are only interested in whether an expression is possible and whether it conforms to certain specific properties. They are not interested in all the possible ways of rendering an expression of the process and actualizing it. This, however, is precisely what computer scientists are interested in.
Mathematics is primarily concerned with the nature of the behavior of process regardless of how that process is expressed. Computer science is primarily concerned with the nature of the expression of processes regardless of what particular process might be expressed. This core concern with the nature of expression itself is the unique conceptual focus that distinguishes computer science from the other sciences and from mathematics. Computer science is the science of expression.
One published definition of computer science comes near the mark.
The notion of the algorithm has become firmly established as a fundamental conceptual paradigm of "the theory of computer science."
Introductory texts on computer science often begin with a chapter on the notion of the algorithm. The following generally covers the etymology of the word and a definition of the notion which consists of a belabored list of properties which an expression must satisfy to qualify as an algorithm. An issue conspicuously absent from these introductory chapters is how the notion contributes to the resolution of significant problems of computer science. In the remaining chapters of these texts, there is typically no further appeal to the notion of the algorithm and rarely even a usage of the word itself. The notion is never or very rarely appealed to in texts on logic design, architecture, operating systems, programming, software engineering, programming languages, compilers, data structures and data base systems.
Is the notion of the algorithm really a fundamental concept of computer science? Is it just pretentious but harmless window dressing or has the notion actually been detrimental to the growth and development of computer science? Does "the theory of computer science" have anything to do with computer science?
Computer science texts typically define the notion of the algorithm by simply presenting a list of qualifying properties for an algorithm. In particular, an algorithm:
These properties are substantially similar to what Hilbert proposed in 1900 and it is easy to see how this list of restrictive characteristics serves to define what is acceptable as a mathematical solution, but what is its significance in computer science?
The notion of the algorithm demarcates all expressions into algorithm and non-algorithm but, what purpose does it serve to know that one program is an acceptable mathematical solution and another is not? Is the expression of one fundamentally different from the expression of the other? Is one interpreted differently from the other? Is a different machine required for one than the other? Do operations ordered in strict sequence somehow work better than operations ordered with concurrency? Are algorithms first class citizens in some sense and non-algorithms second class citizens? Most existing programs are considered "unacceptable" mathematical solutions.
Important types of programs in computer science do not qualify as algorithms. An operating system is not supposed to terminate nor does it yield a singular solution.
It cannot be deterministic because it must relate to uncontrolled inputs from the outside world. Any program utilizing random input to carry out its process such as a monte carlo simulation or fuzzy logic simulation is not an algorithm. Many programs and computers utilize concurrency where many operations are carried out simultaneously. Are these not algorithms? If a formerly sequential program qualifying as an algorithm is parallelized by a vectorizing compiler, is it no longer an algorithm? No program with a bug can be an algorithm and it is an accepted truism that no significant program can be demonstrated to be bug free.
Does determining whether a given expression is an acceptable mathematical solution or not, help to identify the expression that is most readable, most efficient, fastest or easiest to interpret? Does such a distinction aid in building better computer systems or in writing better programs?
These difficulties with the notion of the algorithm have not gone unnoticed. The following observations about algorithms are quotations from various sources.
"We drop the requirement that the algorithm stop and consider infinite algorithms"--John K. Rice and John R. Rice.
These people have sensed an inappropriate discrimination or simply an incompleteness and proposed a remedy. Programs that do not terminate, are not deterministic and do not give specific solutions are now "included." They are no longer simply non-algorithmic they have positive labels, but what has been achieved by this labeling? Do these new labels provide any useful conceptual discrimination? A non-algorithm by any other name is still just an expression that, however useful it might be in other contexts, is unacceptable as a mathematical solution.
Computer science does not have the same view points as mathematics. Computer science is not in pursuit of solely mathematical solutions, it is in pursuit of a general understanding of process expression. Algorithm, non-algorithm is simply not the kind of conceptual discrimination that is useful in computer science. The notion of the algorithm has not discouraged anyone from creating nondeterministic, nonterminating, incorrect or otherwise unacceptable expressions nor has it aided anyone in creating better programs or computers.
The problem is that the notion of the algorithm taken out of its mathematical context has been used for duties it was never intended to fulfill. The notion of a sequence of operations was considered by the mathematicians as an adequate and simple rendering of process expression and for their purposes indeed it was adequate. It was never intended to be a paradigm of process expression in general. Unfortunately, this is the role it came to serve in computer science.
So how does the notion of the algorithm fare purely as a model of process expression? The definition of the algorithm states that a process expression should be a strict one with a time sequence of precisely defined operations. It does not suggest what an operation is or how one should be precisely defined. It is, however, in this precise definition of the operation that the basic questions of expression must be addressed. How is the input data and output data characterized? Just how does the input data turn into output data? How does the data of one operation relate to the data of another operation? The notion of the algorithm addresses none of these issues. It just states that operations must be precisely defined. This unsupported imperative is at once an admission of expressional incompleteness and a refusal to be complete.
In whatever manner operations manage to get defined the notion of the algorithm specifies that they should be arranged in strict sequence. The only formal relationship between operations that the notion of the algorithm admits is that of sequential order. Is this notion of arranging operations in sequence fundamental or necessary in any sense?
The notion of a sequence of precisely defined operations is more familiarly known as the sequential process model. The sequential process is the informal version of the algorithm without the operational strictures of termination, effectiveness and determination. Sequentiality is generally considered a necessary theoretical primitive of process expression. Concurrency, for instance, is viewed as a secondary property derived from sequentiality. Several of the following quotes convey the general attitude on concurrency.
There is much that is sequential in dealing with computers, but is this sequentiality conceptually fundamental or just an artifact of the way we happen to currently be building computers and thinking about mathematics?
In actuality, single event sequentiality is derived from continuously functioning concurrent elements. Computers are built from logic circuits which in turn are built of networks of continuously and concurrently operating logic gates. There is nothing sequential about a combinational logic circuit. Many circuits operate concurrently to carry out one sequential operation of a computer. The most primitive operations of any process expression must occur concurrently. Consider the construction of a logic circuit in which the logic gates operate strictly one at time sequentially. The logic gates cannot sequentialize themselves so a sequential controller must be postulated. But this controller itself must also be constructed in terms of strictly sequential operational units which will in turn need a sequence controller. The most primitive operations of any process must be expressed in concurrently proceeding relationships. They cannot be expressed strictly sequentially.
The notion of the algorithm fails on all counts to be a viable model of process expression. Termination, determination and effectiveness are not necessary properties of process expression. There can be nonterminating, nondeterministic and incorrect expressions of useful and valid processes. "Precisely defined operation" is not a sufficient characterization of an expressional unit of process. The strictly sequential composition of expressional units is neither expressionally necessary nor sufficient.
When computer science was born, it borrowed substance from a particularly appropriate branch of mathematics, computability, which was founded as a discipline of pure mathematics at the beginning of the century and which studied mechanical computation using state machines, Turing machines and formal languages before the computer even existed. For the mathematicians, a sequence of operations was the simplest canonical form of expression that allowed the comparisons that they were interested in. They could directly compare computations by comparing the number of operations and the forms of the operations themselves. They were perfectly aware of the possibility of concurrent operations and purposely factored such irrelevant complications out of their expressions. The mathematicians did not need anything beyond the sequential process model of expression.
The mathematicians, with their rigorous formality were the certified theorists among a community of mostly engineers. The algorithmic sequential process model was available, it was adequate, it had authority and it had no competition. The model of computation for mathematics became the very firmly established model of expression for what was quite reasonably considered to be the foundational efforts in the theory of computers. This discipline of mathematics came to be called "the theory of computer science" while retaining all the flavor of pure mathematics and the notion of the algorithm came to be accepted as a fundamental paradigm of computer science.
The computer builders and users on the other hand were developing a sense that the computer might actually be conceptually intractable. It was pointed out early on that a computer and any program for it were arbitrary human artifacts. Since a human could build the computer and program it any way he chose the endeavor could not possibly be subject to any inherent limitations in the same sense that nature is subject to its laws or that mathematics is subject to its rules. Continuing experience further suggested that computing did indeed exhibit intractable degrees of freedom of expression. Given this perception the only approach to understanding so intractable a subject seemed to be experience and experiment and the only approach to managing it to be imposed rationale and convention. A comprehensive theory of process expression may not in fact be possible and the mathematicians were probably doing about as much as could be done even though it wasn't very useful.
As the field of computers grew, each area of computing developed its own isolated set of concepts and conventions and largely ignored "the theory of computer science". These areas attempt to interface with each other. For instance, architectures are designed to facilitate operating system functions. Compilers are optimize to specific architectures. Languages and architectures accommodate specific applications. But, there has not emerged from these local efforts a unified theory that pretends to be comprehensive and that can challenge the mathematical models for the title "The Theory of Computer Science".
Even though the mathematical theories have had little practical influence, the territory is still generally considered to be mathematical in nature and the mathematical perspective as well as the mathematical approach have permeated the disciplines of practical computing. However, the mathematical perspective is the wrong point of view. It is asking the wrong questions. The mathematical point of view is concerned with the behavior of classes of processes, the mapping of the domain to the range, the limits of behavior and anomalies of behavior? A mathematician is not greatly concerned with how a process is expressed. It may be expressed in any convenient language and executed on any convenient machine.
The computer scientist on the other hand is concerned about questions of expression. He wants to know, in general, how to define the optimal programming language, the best architecture to interpret programs in that language and how best to write those programs. He is not greatly concerned with what processes might be programmed on the computer and even less concerned about how any particular process might behave in terms of its domain and range.
A computer scientist is concerned about all of the possible ways to express a process regardless of what process is expressed. In contrast, a mathematician is concerned with the behavior of a specific class of processes regardless of how that process is expressed. Mathematicians and computer scientists are pursuing fundamentally different questions. The mathematicians tools are not as appropriate, as once supposed, to solve the questions of the computer scientist. The primary questions of computer science are not of computational possibilities but of expressional possibilities. Computer science does not need a theory of computation rather, it needs a theory of expression.
One pioneer of "computer science" elegantly summarizes the situation:
The following description attempts to formulate a comprehensive theory of computer science that can compete directly with the established mathematical theory of computer science. In particular, an exploration of process from the point of view of its expression is attempted. In addition, the description details some of the fundamental principles of expression and explains how these principles produce the enormous diversity of process expression in the physical and abstract world. By putting forth the proper questions from the proper perspective, it can be shown that computers are not as artifactual and intractable as once thought but simply one manifestation of a fundamental natural phenomenon.